// src-tauri/src/utils/db_init.rs
#![allow(dead_code)]
use std::path::{Path, PathBuf};
use std::fs;
use std::sync::Arc;
use sea_orm::{Database};
use log::{info};
use dirs_next::home_dir;
use crate::utils::db_util::DBUtil;
use dirs_next::data_dir;

/// 数据库初始化工具
pub struct DBInit;

impl DBInit {
    /// 获取数据库存储路径
    pub fn get_db_path(app_name: String) -> PathBuf {
        let mut path = data_dir().unwrap_or_else(|| {
            home_dir().expect("无法获取用户主目录")
        });
        path.push(&app_name);
        if !path.exists() {
            fs::create_dir_all(&path).expect("无法创建应用数据目录");
        }

        path.join(format!("{}.db", app_name))
    }

    /// 初始化数据库连接池
    pub async fn init_pool(app_name: String) -> anyhow::Result<Arc<DBUtil>> {
        // 获取数据库路径
        let db_path = Self::get_db_path(app_name);

        info!("数据库文件路径: {:?}", db_path);

        // 确保数据库文件存在
        Self::ensure_db_exists(&db_path)?;

        // 构建数据库URL
        let db_url = format!("sqlite://{}?mode=rwc", db_path.to_str().unwrap());

        // 连接数据库
        let conn = Database::connect(&db_url)
            .await
            .map_err(|e| anyhow::anyhow!("数据库连接失败: {:?}", e))?;

        // 创建数据库工具实例
        let db_util = Arc::new(DBUtil::new(conn));

        Ok(db_util)
    }

    /// 确保数据库文件存在
    fn ensure_db_exists(db_path: &Path) -> anyhow::Result<()> {
        if !db_path.exists() {
            info!("数据库文件不存在，正在创建新数据库: {:?}", db_path);
            // 创建数据库文件
            fs::File::create(db_path)?;
        } else {
            info!("使用现有数据库: {:?}", db_path);
        }
        Ok(())
    }
}
